/*********************************
*    Operand.h                    *
*	操作数栈结构操作				 *
*********************************/

#include"Operand.h"
#include"SymbolTable.h"
#include"Lex.h"

Operand opstack[OPSTACK_SIZE];
Operand *optop;

/*
	操作数入栈
	type：操作数类型
	r：操作数存储类型
	value：操作数值
*/
void operand_push(Type *type, int r, int value)
{
	if (optop >= opstack + (OPSTACK_SIZE - 1))
		error("内存分配失败！");
	optop++;
	optop->type = *type;
	optop->r = r;
	optop->value = value; 
}

/*
	弹出栈顶操作数
*/
void operand_pop()
{
	optop--;
}

/*
	交换两个栈顶操作数顺序
*/
void operand_swap()
{
	Operand tmp;

	tmp = optop[0];
	optop[0] = optop[-1];
	optop[-1] = tmp;
}

/*
	操作数赋值
	t：操作数数据类型
	r：操作数存储类型
	value：操作数数值
*/
void operand_assign(Operand *opd, int t, int r, int value)
{
	opd->type.t = t;
	opd->r = r;
	opd->value = value;
}
